package ar.uba.dc.tlen.src.grammar;

import java.util.ArrayList;
import java.util.TreeSet;

import ar.uba.dc.tlen.src.exceptions.InvalidProductionException;
import ar.uba.dc.tlen.src.production.Produccion;
import ar.uba.dc.tlen.src.symbols.Caracter;
import ar.uba.dc.tlen.src.symbols.NoTerminal;
/**
 * @author Grupo 
 *  Esta clase representa la gramatica. Sabe cuales son los terminales, no 
 *  terminales, las producciones,etc.   
 */
public class Gramatica {

private TreeSet<Caracter> terminales;
private TreeSet<Caracter> noTerminales;
private TreeSet<Produccion> producciones; //se q se llama produccion. Pero no sabia como ponerle a cada linea de la produccion
private Caracter simboloInicial;

void addProduccion(Caracter caracter, ArrayList<Caracter> lista) throws InvalidProductionException{
	Produccion prod= new Produccion(caracter,lista);
	producciones.add(prod);
	// agrego estructura para que un no terminal sepa que producciones inicia.
	((NoTerminal) caracter).getPartesDerecha().add(prod);
	
}

public TreeSet<Caracter> getNoTerminales() {
	return noTerminales;
}
public void setNoTerminales(TreeSet<Caracter> noTerminales) {
	this.noTerminales = noTerminales;
}
public TreeSet<Produccion> getProducciones() {
	return producciones;
}
public void setProduccion(TreeSet<Produccion> produccion) {
	this.producciones = produccion;
}
public Caracter getSimboloInicial() {
	return simboloInicial;
}
public void setSimboloInicial(Caracter simboloInicial) {
	this.simboloInicial = simboloInicial;
}
public TreeSet<Caracter> getTerminales() {
	return terminales;
}
public void setTerminales(TreeSet<Caracter> terminales) {
	this.terminales = terminales;
}


}
